"""
# -*- coding: utf-8 -*-
# @Time    : 2023/5/29 16:55
# @Author  : 王摇摆
# @FileName: Data.py
# @Software: PyCharm
# @Blog    ：https://blog.csdn.net/weixin_44943389?type=blog
"""
import numpy as np


def createTrainDatasWithNoise(W, start, end, size=10, noise=0.05):
    """
    创建带噪声的训练数据集
    args:
        W - 目标权重系数
        start - 最小值
        end - 最大值
        size - 训练数据集大小
        noise - 噪音大小
    return:
        X - 训练集特征值
        y - 训练集目标值
    """
    np.random.seed(42)
    X = np.random.uniform(start, end, (size, W.shape[0]))
    y = []
    for index in range(len(X)):
        if np.random.random() > noise:
            y.append(np.sign(X[index].dot(W)))
        else:
            y.append(-np.sign(X[index].dot(W)))
    return X, np.array(y)


def buildLine(W, start, end):
    """
    构建一条指定的二维直线
    args:
        W - 权重系数
        start - 最小值
        end - 最大值
        size - 组成线的点的数量
    return:
        x0 - x0集合
        x1 - x1集合
    """
    # x0 = np.linspace(start, end, size)
    x0 = np.linspace(start, end, 100)
    if W[1] == 0:
        x1 = np.zeros(100)
    else:
        x1 = -W[0] * x0 / W[1]
    return x0, x1


# 坐标轴起始点
start = -10
# 坐标轴结束点
end = 10
# 目标权重系数
W = np.array([2, 5])
# 创建线性可分的训练数据集
X, y = createTrainDatasWithNoise(W, start, end)